package com.fjw.controller;

import com.fjw.pojo.Result;
import com.fjw.pojo.User;
import com.fjw.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;
import java.util.Objects;

/**
 * 用户管理控制器
 * 提供用户注册、登录、信息更新等RESTful接口
 */
@RestController//我是控制层
@RequestMapping("/user")
public class UserController {
    @Autowired
    private UserService userService;
    @PostMapping("/regist")
    public Result regist(@RequestBody User user){
        System.out.println("注册请求：" + user); // 打印请求参数（调试用）
        // 检查用户名是否已存在
        User res = userService.findByUsername(user.getUsername());
        if(res != null){
            return Result.error("用户名已被占用");
        }
        // 执行注册逻辑
        userService.regist(user);
        return Result.success();
    }

    /**
     * 用户登录接口
     * @param user 用户实体（包含用户名、密码）
     * @return 登录结果
     */
    @PostMapping("/login")
    public Result login(@RequestBody User user){
        System.out.println("登录请求：" + user); // 打印请求参数（调试用）
        String username = user.getUsername();
        String password = user.getPassword();

        // 查询用户信息
        User res = userService.findByUsername(username);
        System.out.println("查询结果：" + res); // 打印查询结果（调试用）

        // 验证用户是否存在及密码是否正确
        if(res == null){
            return Result.error("用户不存在");
        }
        if(Objects.equals(res.getPassword(), password)){
            return Result.success();
        }else{
            return Result.error("密码错误");
        }
    }

    /**
     * 通过用户名查询用户信息
     * @param username 用户名
     * @return 用户信息
     */
    @GetMapping("/findByUsername")
    public Result findByUsername(String username){
        User res = userService.findByUsername(username);
        return Result.success(res);
    }

    /**
     * 通过ID更新用户信息
     * @param user 包含更新内容的用户实体（需包含ID）
     * @return 更新结果
     */
    @PatchMapping("/updateById")
    public Result updateById(@RequestBody User user){
        System.out.println("更新请求：" + user); // 打印请求参数（调试用）

        // 检查新用户名是否已被占用（排除当前用户）
        User res = userService.findByUsername(user.getUsername());
        if(res != null && !res.getId().equals(user.getId())){
            return Result.error("用户名已被占用");
        }

        userService.updateById(user);
        return Result.success();
    }

    /**
     * 更新用户密码
     * @param id 用户ID
     * @param password 新密码
     * @return 更新结果
     */
    @PatchMapping("/updatePassword")
    public Result updatePassword(Integer id, String password){
        System.out.println("更新密码：ID=" + id); // 打印请求参数（调试用）
        userService.updatePassword(id, password);
        return Result.success();
    }
}

